package com.li.proxy.service;

public class OrderServiceImpl implements OrderService{

    /**
     * 新需求：统计每种操作的耗时
     *
     * 解决方案1：硬编码，在每个业务接口中的每一个业务方法中直接添加统计耗时的代码
     *   这种方案的缺点：
     *     1. 违背OCP开闭原则
     *     2. 代码没有得到复用。（相同代码重复写了很多遍）
     *
     * 解决方案2：编写业务类的子类，让子类继承业务类，对每个业务方法进行重写
     *   缺点：
     *     1. 虽然解决了OCP开闭原则，但是这种方式会导致耦合度很高，因为采用了继承关系，（继承关系是一种耦合度非常高的关系，不推荐使用）
     *     2. 代码没有得到服用。（相同代码重复写了很多遍）
     *
     * 解决方案3：代理模式
     *    优点：
     *      1. 解决了OCP问题
     *      2. 采用代理模式的has a，可以降低耦合度
     *    目前我们使用的是静态代理，这个静态代理的缺点是什么？
     *      每一个需要代理的接口，都需要单独一个代理类
     *      如果系统中有1000个接口，这样类会急剧膨胀，不好维护
     *    怎么解决类爆炸问题？
     *      可以使用动态代理来解决这个问题，动态代理还是代理模式，只不过添加了字节码生成技术
     *      可以在内存中为我们动态生成一个class字节码，这个字节码就是代理类。
     */

    @Override
    public void generate() {
        // 模拟生成订单的耗时
        try {
            Thread.sleep(333);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("订单已生成");
    }

    @Override
    public void modify() {
        // 模拟修改订单的耗时
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("订单已修改");
    }

    @Override
    public void detail() {
        // 模拟查询订单的耗时
        try {
            Thread.sleep(456);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("订单详情");
    }


//    @Override
//    public void generate() {
//        long begin = System.currentTimeMillis();
//        // 模拟生成订单的耗时
//        try {
//            Thread.sleep(333);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//        System.out.println("订单已生成");
//        long end = System.currentTimeMillis();
//        System.out.println("执行耗时：" + (end - begin));
//    }
//
//    @Override
//    public void modify() {
//        long begin = System.currentTimeMillis();
//        // 模拟修改订单的耗时
//        try {
//            Thread.sleep(1000);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//        System.out.println("订单已修改");
//        long end = System.currentTimeMillis();
//        System.out.println("执行耗时：" + (end - begin));
//    }
//
//    @Override
//    public void detail() {
//        long begin = System.currentTimeMillis();
//        // 模拟查询订单的耗时
//        try {
//            Thread.sleep(456);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//        System.out.println("订单详情");
//        long end = System.currentTimeMillis();
//        System.out.println("执行耗时：" + (end - begin));
//    }
}
